<?php

class loja_trocaModel extends Model{
    
    protected $tabela = "loja_sac_troca";
    protected $pkey   = array("cod_compra", "cod_produto");
    protected $dados = array(
        
        'cod_compra' => array(
            'name'    => "Número do pedido",
            'pkey'    => true,
            'type'    => 'int',
            'grid'    => true,
            'display' => true,
            'notnull' => true,
            'fkey'      => array(
                'keys'          => array('cod_compra', 'cod_produto'),
                'model' 	=> 'loja/compra',
                'cardinalidade' => '1n'//nn 1n 11
            )
         ),

        'cod_produto' => array(
            'name'    => 'Código do produto',
            'type'    => 'varchar',
            'size'    => '50',
            'grid'    => true,
            'display' => true,
            'notnull' => true,
            'pkey'    => true,
            'fkey'    => array(
                'model' 	=> 'loja/produto',
                'keys'          => array('cod_produto', 'pnome'),
                'cardinalidade' => '1n'//nn 1n 11
            )
       	),
        
        'cod_usuario' => array(
            'name'    => 'Código do Usuário',
            'type'    => 'int',
            'notnull' => true,
            'fkey'    => array(
                'model' 	=> 'usuario/login',
                'keys'          => array('cod_usuario', 'email'),
                'cardinalidade' => '1n'//nn 1n 11
            )
       	),

        'motivo' => array(
            'name'    => 'Motivo',
            'type'      => 'enum',
            'default'   => '',
            'notnull'   => true,
            'grid'      => true,
            'display'   => true,
            'options'   => array(
                'pdef' => 'Produto com defeito',
                'facc' => 'Faltam acessórios',
                'pdif' => 'Produto diferente do solicitado',
                'arr'  => 'Arrependimento (até 7 dias após a compra)'
            ),
       	),
        
        'motivo_explicacao' => array(
            'name'      => 'Comentários',
            'type'      => 'text',
            'notnull'   => true
       	),

        'restituicao' => array(
            'name'    => 'Restituição',
            'type'      => 'enum',
            'default'   => 'mp',
            'notnull'   => true,
            'display'   => true,
            'options'   => array(
                'vc' => 'Vale Compras',
                'mp' => 'Mesmo Produto',
                'es' => 'Estorno'
            ),
       	),        

        'status' => array(
            'name'      => 'Status',
            'type'      => 'enum',
            'default'   => 'ag',
            'display'   => true,
            'notnull'   => true,
            'options'   => array(
                'ng' => 'Negado',
                'ac' => 'Aceito',
                'sa' => 'Sob Avaliação',
                'ag' => 'Aguarda Confirmação do Usuário por email'
            ),
       	),

        'data' => array(
            'name'      => 'Data',
            'type'      => 'timestamp',
            'default'   => "CURRENT_TIMESTAMP",
            'especial'  => 'hide'
       	)
    );

    public function inserir($dados){

        //verifica se compra existe
        $this->LoadModel('loja/compra', 'cobj');
        $cdados = $this->cobj->getSimpleItem($dados['cod_compra'], array('cod_compra', 'cod_usuario', 'status', 'data'));
        if(empty ($cdados)){
            $this->setErrorMessage("Esta compra não pode ser reembolsada ou não existe código de compra");
            return false;
        }

        //verifica se compra já foi entregue
        if($cdados['status'] != "en"){
            $this->setErrorMessage("Não é possível efetuar trocas e reembolso de produtos que ainda não foram entregues!");
            return false;
        }

        //verifica se já comprou há mais de 7 dias e a troca é por arrependimento
        if($dados['motivo'] == 'arr'){
            $dias = timeResource::diffDate($cdados['data'], "", "d");
            if($dias > 7){
                $this->setErrorMessage("Não é possível trocar produtos que não estejam com defeito após 7 dias");
                return false;
            }
        }

        //verifica se usuario que comprou existe
        $this->LoadModel('usuario/login', 'uobj');
        $udados = $this->uobj->getSimpleItem($cdados['cod_usuario'], array('cod_usuario', 'email'));
        if(empty ($udados)){
            $this->setErrorMessage("Não existe nenhum usuário vinculado a esta compra. Ligue no SAC da loja para mais detalhes.");
            return false;
        }

        //verifica se produto foi registrado na compra
        $this->LoadModel('loja/compra/cproduto', 'pobj');
        $pdados = $this->pobj->getSimpleItem(array($dados['cod_produto'], $dados['cod_compra']));
        if(empty ($pdados)){
            $this->setErrorMessage("O produto com o código (".$dados['cod_produto'].") não está registrado nesta compra");
            return false;
        }

        //verifica se já existe uma solicitação de troca com estes dados
        $selfdados = $this->getSimpleItem(array($dados['cod_compra'], $cdados['cod_usuario']));
        if(!empty ($selfdados)){
            //$this->sendTrocaEmail($dados['cod_compra'], $dados['cod_produto'], $udados['email']);
            $this->setErrorMessage("Já existe uma solicitação de troca para este produto");
            return false;
        }

        //registra os dados
        $dados['cod_usuario'] = (isset($dados['cod_usuario'])?$dados['cod_usuario']:$cdados['cod_usuario']);
        if(!parent::inserir($dados))return false;
        $url  = "loja/sac/conftroca/".$dados['cod_compra']."-".$dados['cod_produto'];
        if(!$this->sendTrocaEmail($dados['cod_compra'], $dados['cod_produto'], $udados['email'])) Redirect($url);
        $this->setSuccessMessage("Para confirmar a identidade do comprador enviamos um email para o usuário registrado nesta compra.
                    Clique no link que enviamos para que o processo de troca tenha andamento.");
        return true;

    }

    public function conftroca($var){
        $var         = explode("-", $var);
        $cod_compra  = array_shift($var);
        $cod_produto = array_shift($var);
        $compra = $this->getSimpleItem(array($cod_compra, $cod_produto), array('cod_compra'));
        if(empty ($compra)){
            $this->LoadResource("html", 'html');
            $url = $this->html->getLink("loja/sac/trocaform");
            $this->setErrorMessage("Não existe nenhuma solicitação de troca para esta compra ou este produto.
                Para fazer tal solicitação <a href='$url'>clique aqui</a>");
            return false;
        }

        $vars = $this->selecionar(array('status', 'cod_usuario'), "`cod_compra` = '$cod_compra' AND `cod_produto` = '$cod_produto'");
        $vars = array_shift($vars);
        if(empty ($vars) || $vars['status'] == "ag"){
            $post['status'] = "sa";
            $id = array($cod_compra, $cod_produto);
            $this->LoadResource("html", 'html');
            $this->LoadModel("contato/mensagens", 'msg');
            if (!parent::editar($id, $post)){

                $link = URL . "admin/index.php?url=loja/sac/troca/erro/$cod_compra-$cod_produto";
                $dados = array(
                    'cod_remetente'    => $vars['cod_usuario'],
                    'assunto'          => "Sistema: Setor de trocas",
                    'mensagem'         => "Não foi possível atualizar o banco de dados na operação de troca de produtos,
                        existe um pedido pendente, mas que por motivo desconhecido não pode seguir com andamento.
                        A solicitação pode ser vista <a href='$link'>aqui</a>"
                );
                if(!$this->msg->inserir($dados))
                     $this->setErrorMessage("Não foi possível confirmar sua solicitação. Ligue no SAC para resolver o problema.");
                else $this->setErrorMessage("Não foi possível confirmar sua solicitação,
                        uma mensagem foi enviada para os administradores do site que poderão resolver o problema manualmente");
                return false;
            }else{

                $link  = URL . "admin/index.php?url=loja/sac/troca/";
                $dados = array(
                    'cod_remetente'    => $vars['cod_usuario'],
                    'assunto'          => "Setor de trocas - Solicitação de troca em andamento",
                    'mensagem'         => "Solicitação de troca de produto em andamento e confirmada, para visualizá-la <a href='$link'>clique aqui</a>"
                );
                $this->msg->inserir($dados);
            }
        }

        $this->setSuccessMessage("A solicitação de troca será processada. Em breve entraremos em contato");
        return true;
    }

    public function canceltroca($var){
        $var         = explode("-", $var);
        $var         = array(@$var[0], @$var[1]);
        if(!$this->apagar($var)){
            $this->setErrorMessage('Não foi possível cancelar a troca de mercadorias');
           return false;
        }
        //echo $this->db->getSentenca();
        $this->setSuccessMessage('Troca cancelada com sucesso!');
        return true;
    }

    private function sendTrocaEmail($cod_compra, $cod_produto, $email){
        $this->LoadResource("html", 'html');
        $url  = "loja/sac/conftroca/$cod_compra-$cod_produto";
        $link = $this->html->getLink($url);

        $this->LoadResource("email", 'mail');
        $assunto = "Solicitação de troca";
        $corpo   = "<p>Uma solicitação de troca de produto foi enviada para nossa base de dados.
            Caso não seja você quem solicitou, por favor, desconsidere </p>

            <p>Para dar continuidade a sua solicitação <a href='$link'>clique aqui</a></p>";

        return ($this->mail->sendMail($assunto, $corpo, "",  $email));
    }
}

?>